package com.zackeus.xupdate.factory.impl;

import com.zackeus.common.utils.FileUtils;
import com.zackeus.common.utils.Md5Utils;
import com.zackeus.common.utils.StringUtils;
import com.zackeus.xupdate.XUpdate;
import com.zackeus.xupdate.constant.Error;
import com.zackeus.xupdate.entity.LibraryUpdateEntity;
import com.zackeus.xupdate.entity.UpdateError;
import com.zackeus.xupdate.factory.IFileEncryptor;

import java.io.File;
import java.io.IOException;

/**
 * 默认文件加密器 MD5加密
 * @name: DefaultFileEncryptor
 * @author: zz
 * @date: 2022/11/21
 */
public class DefaultFileEncryptor implements IFileEncryptor {

    @Override
    public String encryptFile(File file) {
        if (FileUtils.isFileExists(file)) {
            try {
                return Md5Utils.getFileMD5String(file);
            } catch (IOException e) {
                XUpdate.with().onUpdateError(new UpdateError(Error.UPDATE_UNKNOWN, e));
            }
        }
        return "";
    }

    /**
     * 检验文件是否有效（加密是否一致）
     * @param entity 加密实体, 如果encrypt为空，直接认为是有效的
     * @return 文件是否有效
     */
    @Override
    public boolean isFileValid(LibraryUpdateEntity entity) {
        if (entity == null ||  StringUtils.isBlank(entity.getEncrypt()))
            return Boolean.TRUE;
        return entity.getEncrypt().equalsIgnoreCase(this.encryptFile(new File(entity.getFileDir(), entity.getFileName())));
    }
}
